package 剑指offer;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * @description: 链接：https://www.nowcoder.com/questionTerminal/4284c8f466814870bae7799a07d49ec8
 * 来源：牛客网
 * <p>
 * 小易来到了一条石板路前，每块石板材从1挨着编号为：1、2、3 .......
 * 这条石板路要根据特殊的规则才能前进：对于小易当前所在的编号为K的石板，小易单次只能往前跳K的一个约数（不含1和K）步，
 * 即跳到K + X（X为K的一个非1和本身的约数）的位置。小易当前处在编号为N的石板，他想跳到编号恰好为M的石板去，小易想知道最少需要跳跃随时可以到达。
 * 例如：
 * N = 4，M = 24：
 * 4-> 6-> 8-> 12-> 18-> 24
 * 于是小易最少需要跳跃5次，就可以从4号石板跳到24号石板
 * @author: ywk
 * @date: 2020-11-22
 */
public class 跳石板 {
    static int num = -1;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int r = deal(n, m);
        if (r == Integer.MAX_VALUE) r = -1;
        System.out.println(r);
    }


    public static int deal(int n, int m) {//n到m
        System.out.println(deal(n, m, 0, new ArrayList<>(), new ArrayList<>()));
        return num;
    }

    private static List<List<Integer>> deal(int n, int m, int depth, List<Integer> curPath, List<List<Integer>> allPath) {
        List<Integer> gongYue = getGongYue(n);
        for (int i = gongYue.size() - 1; i >= 0; i--) {
            Integer val = gongYue.get(i);
            if (n + val > m) {
                continue;
            }
            curPath.add(n + val);
            if (n + val == m) {
                System.out.println(curPath);
                allPath.add(new ArrayList<>(curPath));
            } else {
                deal(n + val, m, depth + 1, curPath, allPath);
            }
            curPath.remove(curPath.size() - 1);
        }
        return allPath;
    }

    public static List<Integer> getGongYue(int n) {
        int end = (int) Math.sqrt(n);
        List<Integer> yueShuList = new LinkedList<>();
        int yueShu = 2;
        int index = 0;
        while (yueShu <= end) {
            if (n % yueShu == 0) {
                yueShuList.add(index, yueShu);
                int next = n / yueShu;
                if (next != yueShu) {
                    yueShuList.add(yueShuList.size() - index, n / yueShu);
                }
                index++;
            }
            yueShu++;
        }
        return yueShuList;
    }
}
